home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio / Ham Radio CD-ROM (Emerald Software) (1995).ISO / ant / antenna2 / rectplan.bas < prev    next >
BASIC Source File  |  1986-09-08  |  5KB  |  136 lines

  1. 10 SCREEN 2,0:CLS:KEY OFF
  2. 20 '      JUNE 6, 1986
  3. 30    T$="ARRAY FACTOR OF PLANAR RECTANGULAR ARRAY":LC=1:GOSUB 1350
  4. 40 '      AHMAD FAIZAL MOHD ZAIN
  5. 50 PRINT:PRINT:PRINT:PRINT
  6. 60 DEF FN LOGTEN(X)=LOG(X)/LOG(10)
  7. 70 DIM AF(370),Y(400)
  8. 80 PI=3.141592
  9. 90 DEF FN FX(PSIX)=(SIN(M*PSIX/2)/SIN(PSIX/2))/M
  10. 100 DEF FN GX(PSIX)=COS(M*PSIX/2)/COS(PSIX/2)
  11. 110 DEF FN FY(PSIY)=(SIN(N*PSIY/2)/SIN(PSIY/2))/N
  12. 120 DEF FN GY(PSIY)=COS(N*PSIY/2)/COS(PSIY/2)
  13. 130 PRINT"   DO YOU WANT TO GIVE ":PRINT
  14. 140 PRINT"   1)MAIN BEAM DIRECTION"
  15. 150 PRINT"OR 2)PHASE SHIFTS"
  16. 160 LOCATE 13,1:INPUT AN
  17. 170 IF AN<1 OR AN>2 THEN PRINT"TYPE 1 OR 2":GOTO 160
  18. 180 ON AN GOTO 190,220
  19. 190 INPUT"DIRECTION IN THETA (deg) ";THE0
  20. 200 INPUT"DIRECTION IN PHI   (deg) ";PHI0
  21. 210 GOTO 240
  22. 220 INPUT "PHASE SHIFT (IN X) deg  ";ALPX
  23. 230 INPUT "PHASE SHIFT (IN Y)  deg ";ALPY
  24. 240 INPUT "# OF ELEMENTS (IN X)";M
  25. 250 INPUT "# OF ELEMENTS (IN Y)";N
  26. 260 INPUT "SEPERATION (IN X) lambda ";DX
  27. 270 INPUT "SEPERATION (IN Y) lambda ";DY
  28. 280 '
  29. 290 ON AN GOTO 300,360
  30. 300 TH=THE0*PI/180:PH=PHI0*PI/180
  31. 310 ALPRX=-2*PI*DX*SIN(TH)*COS(PH)
  32. 320 ALPRY=-2*PI*DY*SIN(TH)*SIN(PH)
  33. 330 ALPX=ALPRX*180/PI
  34. 340 ALPY=ALPRY*180/PI
  35. 350 GOTO 490
  36. 360 ALPRX=ALPX*PI/180
  37. 370 ALPRY=ALPY*PI/180
  38. 380 BYDX=ALPRY*DX:BXDY=ALPRX*DY
  39. 390 IF BXDY>0 THEN PHI0=(180/PI)*ATN(BYDX/BXDY)
  40. 400 IF BXDY<0 THEN PHI0=180*SGN(BYDX)+(180/PI)*ATN(BYDX/BXDY)
  41. 410 IF BXDY=0 THEN PHI0=90*SGN(BYDX)
  42. 420 IF BYDX=0 AND BXDY<0 THEN PHI0=180
  43. 430 XX=ALPRX/(2*PI*DX):YY=ALPRY/(2*PI*DY)
  44. 440 ZZ=SQR(XX*XX+YY*YY)
  45. 450 IF ZZ=-1 THEN THE0=-90
  46. 460 IF ZZ=1 THEN THE0=90
  47. 470 IF ZZ<>-1 OR ZZ<>1 THEN THE0=ATN(ZZ/(SQR(1-ZZ*ZZ)))
  48. 480 THE0=THE0*180/PI
  49. 490 PSIX0=ALPRX+2*PI*DX*SIN(0)*COS(0)
  50. 500 YMAX=0:YMIN=0
  51. 510 P=0   'xz-plane
  52. 520 GOSUB 630:GOSUB 800
  53. 530 LOCATE 22,10:PRINT"Antenna pattern in xz-plane (PHI=0)"
  54. 540 LOCATE 23,1:PRINT"I'm doing yz-plane calculation.  Please wait...";
  55. 550 P=90  'yz-plane
  56. 560 YMIN=0:YMAX=0
  57. 570 GOSUB 630
  58. 580 LOCATE 23,1:PRINT"Type return to continue...                    ";:INPUT W
  59. 590 GOSUB 800
  60. 600 LOCATE 22,10:PRINT"Antenna pattern in yz-plane (PHI=90)"
  61. 610 GOSUB 1290
  62. 620 END
  63. 630   FOR THE=0 TO 360
  64. 640 '    LOCATE 15,19:PRINT 180-THE
  65. 650     TH=THE*PI/180
  66. 660     PHI=P*PI/180
  67. 670     PSIX=ALPRX+2*PI*DX*SIN(TH)*COS(PHI)
  68. 680     PSIY=ALPRY+2*PI*DY*SIN(TH)*SIN(PHI)
  69. 690     IF SIN(PSIX/2)=0 AND SIN(PSIY/2)=0 THEN  AF(THE)=1
  70. 700     IF SIN(PSIX/2)=0 AND SIN(PSIY)<>0 THEN AF(THE)=FN FY(PSIY)
  71. 710     IF SIN(PSIY/2)=0 AND SIN (PSIX)<>0 THEN AF(THE)=FN FX(PSIX)
  72. 720     IF SIN(PSIX/2)<>0 AND SIN(PSIY/2)<>0 THEN AF(THE)=FN FX(PSIX)*FN FY(PSIY)
  73. 730     Y(THE)=ABS(AF(THE))
  74. 740     Y(THE)=20*FN LOGTEN(Y(THE))
  75. 750     IF  Y(THE)<YMIN THEN YMIN= Y(THE)
  76. 760     IF Y(THE)>YMAX THEN YMAX=Y(THE)
  77. 770   NEXT THE
  78. 780 YMAX=YMAX-YMIN
  79. 790 RETURN
  80. 800 SCREEN 2,0:CLS
  81. 810 VIEW (10,2)-(400,164),,1
  82. 820 WINDOW (-YMAX,-YMAX)-(YMAX,YMAX)
  83. 830 CLS
  84. 840 '
  85. 850 CIRCLE (0,0),YMAX,1
  86. 860 CIRCLE (0,0),.75*YMAX,1
  87. 870 CIRCLE (0,0),.5*YMAX,1
  88. 880 CIRCLE (0,0),.25*YMAX,1
  89. 890 '
  90. 900 LINE (-YMAX,0)-(YMAX,0),1
  91. 910 LINE (0,YMAX)-(0,-YMAX),1
  92. 920 LINE (-.707*YMAX,.707*YMAX)-(.707*YMAX,-.707*YMAX),1
  93. 930 LINE (-.707*YMAX,-.707*YMAX)-(.707*YMAX,.707*YMAX),1
  94. 940 '
  95. 950 PSET (0,Y(0))
  96. 960 FOR TH=0 TO 360
  97. 970   XX=TH*PI/180
  98. 980   Y(TH)=Y(TH)-YMIN
  99. 990   Y=Y(TH)*COS(XX)
  100. 1000   X=Y(TH)*SIN(XX)
  101. 1010   LINE -(X,Y),2
  102. 1020 NEXT TH
  103. 1030 LOCATE 1,53:PRINT"  RECTANGULAR ARRAY"
  104. 1040 LOCATE 2,53:PRINT USING "SPACING IN X = ##.###";DX
  105. 1050 LOCATE 3,53:PRINT USING "SPACING IN Y = ##.###";DY
  106. 1060 LOCATE 5,53:PRINT USING "No. OF ELEMENTS IN X = ###";M
  107. 1070 LOCATE 6,53:PRINT USING "No. OF ELEMENTS IN Y = ###";N
  108. 1080 LOCATE 8,53:PRINT"    PROGRESSIVE (deg)"
  109. 1090 LOCATE 9,53:PRINT USING "PHASE SHIFT IN X = ###.##";ALPX
  110. 1100 LOCATE 10,53:PRINT USING "PHASE SHIFT IN Y = ###.##";ALPY
  111. 1110 LOCATE 12,53:PRINT"     MAIN BEAM (deg)"
  112. 1120 LOCATE 13,53:PRINT USING "IN THETA = ###.##";THE0
  113. 1130 LOCATE 14,53:PRINT USING "IN PHI   = ###.##";PHI0
  114. 1140 LOCATE 16,53:PRINT USING "dB scale = ###.##";YMAX*.25;:PRINT" dB/div"
  115. 1150 LOCATE 20,25:PRINT"180":LOCATE 2,26:PRINT"0"
  116. 1160 LOCATE 17,53:PRINT"0 dB on largest circle"
  117. 1170 RETURN
  118. 1180 T$="DO YOU WANT TO RUN AGAIN (Y/N)?":LC=25:GOSUB 1240
  119. 1190 AN$=INKEY$
  120. 1200 IF AN$="Y" OR AN$="y" THEN RUN
  121. 1210 IF AN$="N" OR AN$="n" THEN END
  122. 1220 GOTO 1180
  123. 1230 :
  124. 1240 LOCATE LC,(40-LEN(T$))/2+1:PRINT T$;:RETURN    'SUBROUTINE TO CENTRE TEXT
  125. 1250 END
  126. 1260 LOCATE 24,1:PRINT"TYPE <RETURN> TO CONTINUE...";:INPUT W:SCREEN 0,0
  127. 1270 PRINT"I'M D      OME CALCULATION.  PLEASE WAIT..."
  128. 1280 RETURN
  129. 1290 T$="   DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N)? ":LC=23:GOSUB 1350
  130. 1300 AN$=INKEY$
  131. 1310 IF AN$="Y" OR AN$="y" THEN RUN
  132. 1320 IF AN$="N" OR AN$="n" THEN END
  133. 1330 GOTO 1290
  134. 1340 :
  135. 1350 LOCATE LC,1:PRINT T$:RETURN
  136.